package com.hy;

import java.util.Arrays;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:统计子岛屿
 *
 * 给你两个 m x n 的二进制矩阵 grid1 和 grid2 ，它们只包含 0 （表示水域）和 1 （表示陆地）。一个 岛屿 是由 四个方向 （水平或者竖直）上
 * 相邻的 1 组成的区域。任何矩阵以外的区域都视为水域。
 * 如果 grid2 的一个岛屿，被 grid1 的一个岛屿 完全 包含，也就是说 grid2 中该岛屿的每一个格子都被 grid1 中同一个岛屿完全包含，那么我们称
 * grid2 中的这个岛屿为 子岛屿 。
 *
 * 请你返回 grid2 中 子岛屿 的 数目 。
 * User:Mr.Du
 * Date:2023/10/9
 * Time:21:05
 */
public class CountSubIslands {

    public int countSubIslands(int[][] grid1, int[][] grid2) {
        int m = grid1.length, n = grid1[0].length, count = 0;
        // 先排除不是子岛屿的节点
        for(int i = 0;i < m;i++){
            for(int j = 0;j < n;j++){
                if(grid2[i][j] == 1 && grid1[i][j] == 0){
                    dfs(grid2, i, j, m, n);
                }
            }
        }
        System.out.println("======");
        for(int i = 0;i < m;i++){
            for(int j = 0;j < n;j++){
                if(grid2[i][j] == 1 && grid1[i][j] == 1){
                    count++;
                    dfs(grid2, i, j, m, n);
                }
            }
        }
        return count;
    }

    public void dfs(int[][] grid2, int i, int j, int m, int n){
        if(i >= m || i < 0 || j >= n || j < 0
                || grid2[i][j] == 0 ){
            return;
        }
        grid2[i][j] = 0;
        dfs(grid2, i + 1, j, m, n);
        dfs(grid2, i - 1, j, m, n);
        dfs(grid2, i, j + 1, m, n);
        dfs(grid2, i, j - 1, m, n);
    }

    public static void main(String[] args) {
        int[][] grid1 = {{1,1,1,0,0},{0,1,1,1,1},{0,0,0,0,0},{1,0,0,0,0},{1,1,0,1,1}};
        int[][] grid2 = {{1,1,1,0,0},{0,0,1,1,1},{0,1,0,0,0},{1,0,1,1,0},{0,1,0,1,0}};
        CountSubIslands countSubIslands = new CountSubIslands();
        countSubIslands.countSubIslands(grid1, grid2);

    }
}
